package ar.uba.fi.algo3.tests;

import org.junit.Test;

import junit.framework.Assert;
import junit.framework.TestCase;
import ar.uba.fi.algo3.auxiliares.*;
import ar.uba.fi.algo3.modelo.CampoBatalla;
import ar.uba.fi.algo3.modelo.astillero.*;
import ar.uba.fi.algo3.modelo.nave.Nave;


public class AstilleroTest extends TestCase{	
	
	CampoBatalla campoBatalla;
	Direccion direccion;
	Astillero fabrica;
	
	@Test	
	public void testCrearLancha (){		
		 
		fabrica= new AstilleroDeLanchas();
		Nave unaLancha= fabrica.crearNaveEn(new Posicion(1,1), campoBatalla, direccion);
		
		Assert.assertTrue(unaLancha.obtenerNumeroDeComponentes()==2);
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getDureza(),1);
		assertEquals(unaLancha.obtenerComponentes().get(1).getDureza(),1);
		
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getX(),1);
		assertEquals(unaLancha.obtenerComponentes().get(0).getPosicion().getY(),1);
		
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getX(),2);
		assertEquals(unaLancha.obtenerComponentes().get(1).getPosicion().getY(),1);		
	}
		
	@Test	
	public void testCrearDestructorEn (){
		
		fabrica= new AstilleroDeDestructores();
		Nave unDestructor= fabrica.crearNaveEn(new Posicion(2,1),campoBatalla, direccion);
		
		Assert.assertTrue(unDestructor.obtenerNumeroDeComponentes()==3);	
		
		assertEquals(unDestructor.obtenerComponentes().get(0).getDureza(),1);
		assertEquals(unDestructor.obtenerComponentes().get(1).getDureza(),1);
		assertEquals(unDestructor.obtenerComponentes().get(2).getDureza(),1);
		
		assertEquals(unDestructor.obtenerComponentes().get(0).getPosicion().getX(),2);
		assertEquals(unDestructor.obtenerComponentes().get(0).getPosicion().getY(),1);
		
		assertEquals(unDestructor.obtenerComponentes().get(1).getPosicion().getX(),3);
		assertEquals(unDestructor.obtenerComponentes().get(1).getPosicion().getY(),1);
		
		assertEquals(unDestructor.obtenerComponentes().get(2).getPosicion().getX(),4);
		assertEquals(unDestructor.obtenerComponentes().get(2).getPosicion().getY(),1);
	}
	
	@Test	
	public void testCrearBuqueEn(){
		
		fabrica= new AstilleroDeBuques();
		Nave unBuque= fabrica.crearNaveEn(new Posicion(1,1),campoBatalla, direccion);
		
		Assert.assertTrue(unBuque.obtenerNumeroDeComponentes()==4);	
		
		assertEquals(unBuque.obtenerComponentes().get(0).getDureza(),1);
		assertEquals(unBuque.obtenerComponentes().get(1).getDureza(),1);
		assertEquals(unBuque.obtenerComponentes().get(2).getDureza(),1);
		assertEquals(unBuque.obtenerComponentes().get(3).getDureza(),1);
		
		assertEquals(unBuque.obtenerComponentes().get(0).getPosicion().getX(),1);
		assertEquals(unBuque.obtenerComponentes().get(0).getPosicion().getY(),1);
		
		assertEquals(unBuque.obtenerComponentes().get(1).getPosicion().getX(),2);
		assertEquals(unBuque.obtenerComponentes().get(1).getPosicion().getY(),1);
		
		assertEquals(unBuque.obtenerComponentes().get(2).getPosicion().getX(),3);
		assertEquals(unBuque.obtenerComponentes().get(2).getPosicion().getY(),1);
		
		assertEquals(unBuque.obtenerComponentes().get(3).getPosicion().getX(),4);
		assertEquals(unBuque.obtenerComponentes().get(3).getPosicion().getY(),1);
	}
	
	@Test
	public void testCrearPortaAvionesEn(){
		
		fabrica= new AstilleroDePortaAviones();
		Nave unPortaAviones= fabrica.crearNaveEn(new Posicion(1,1),campoBatalla, direccion);
		
		Assert.assertTrue(unPortaAviones.obtenerNumeroDeComponentes()==5);	
		
		assertEquals(unPortaAviones.obtenerComponentes().get(0).getDureza(),1);
		assertEquals(unPortaAviones.obtenerComponentes().get(1).getDureza(),1);
		assertEquals(unPortaAviones.obtenerComponentes().get(2).getDureza(),1);
		assertEquals(unPortaAviones.obtenerComponentes().get(3).getDureza(),1);
		assertEquals(unPortaAviones.obtenerComponentes().get(4).getDureza(),1);
		
		assertEquals(unPortaAviones.obtenerComponentes().get(0).getPosicion().getX(),1);
		assertEquals(unPortaAviones.obtenerComponentes().get(0).getPosicion().getY(),1);
		
		assertEquals(unPortaAviones.obtenerComponentes().get(1).getPosicion().getX(),2);
		assertEquals(unPortaAviones.obtenerComponentes().get(1).getPosicion().getY(),1);
		
		assertEquals(unPortaAviones.obtenerComponentes().get(2).getPosicion().getX(),3);
		assertEquals(unPortaAviones.obtenerComponentes().get(2).getPosicion().getY(),1);
		
		assertEquals(unPortaAviones.obtenerComponentes().get(3).getPosicion().getX(),4);
		assertEquals(unPortaAviones.obtenerComponentes().get(3).getPosicion().getY(),1);
		
		assertEquals(unPortaAviones.obtenerComponentes().get(4).getPosicion().getX(),5);
		assertEquals(unPortaAviones.obtenerComponentes().get(4).getPosicion().getY(),1);
	}
	
	@Test
	public void testCrearRompeHielosEn (){
		
		fabrica= new AstilleroDeRompeHielos();
		Nave unRompeHielos= fabrica.crearNaveEn( new Posicion(2,1),campoBatalla, direccion);
		
		Assert.assertTrue(unRompeHielos.obtenerNumeroDeComponentes()==3);
		
		assertEquals(unRompeHielos.obtenerComponentes().get(0).getDureza(),2);
		assertEquals(unRompeHielos.obtenerComponentes().get(1).getDureza(),2);
		assertEquals(unRompeHielos.obtenerComponentes().get(2).getDureza(),2);
		
		assertEquals(unRompeHielos.obtenerComponentes().get(0).getPosicion().getX(),2);
		assertEquals(unRompeHielos.obtenerComponentes().get(0).getPosicion().getY(),1);
		
		assertEquals(unRompeHielos.obtenerComponentes().get(1).getPosicion().getX(),3);
		assertEquals(unRompeHielos.obtenerComponentes().get(1).getPosicion().getY(),1);
		
		assertEquals(unRompeHielos.obtenerComponentes().get(2).getPosicion().getX(),4);
		assertEquals(unRompeHielos.obtenerComponentes().get(2).getPosicion().getY(),1);
	}
}
